ACL2023 & 复旦 | 模块化Prompt多任务预训练,可快速适应下游任务(含源码)
引言
Prompt Tuning可以让预训练的语言模型快速适应下游任务。虽然有研究证明:当训练数据足够多的时候,Prompt Tuning的微调结果可以媲美整个模型的训练调优,但当面对Few-shot场景时,PT的调优方法还是存在一定的局限性。针对这个问题,复旦提出了多任务预训练模块化Prompt(简称为:),来提高模型在Few-shot场景下的PT效果,使模型能够快速适应下游任务。
Paper:https://arxiv.org/pdf/2210.07565.pdf
Code:https://github.com/Hzfinfdu/MPMP
背景介绍
基于Prompt Learning的预训练模型在Few-shot场景下取得了显著的进展,它缩小了模型训练和下游任务微调之间的差距,并且通过将下游任务转换成统一的语言建模任务,可以重复使用预训练模型头,而不是训练一个随机初始化的分类头来解决有限数据的任务。然而,基于Prompt Learning通常需要针对每个下游任务进行全参数微调,这就需要大量的计算资源,尤其当面对上百亿的大模型的时候。
随着时间推移,近期有很多工作致力于有效的prompt learning方法的研究,该方法只需学习少量的soft prompt参数,并且能够保持PTM主体参数不变。与模型的整体调优相比,prompt调优优势明显,它对计算资源要求较低并且针对特定的下游任务能够实现快速调优匹配。但是尽管已经证明,当训练数据足够时,提示调整可以与完整模型调整的性能相匹配,但由于随机初始化的soft prompt在预训练和微调之间引入了新的差距,因此在Few-shot中无法从零开始训练soft prompt。
「为了弥补Prompt Tuning的预训练和微调之间的差距,本文提出了多任务预训练模块化提示( ),它是一组在 38 个中文任务上预训练的可组合提示」,在下游任务中,预训练的prompt可以有选择地进行激活和组合,提高对未知任务的泛化能力。为了弥合预训练和微调之间的差距,将上下游任务制定为统一到了一个机器阅读理解任务中。通过在梯度下降、黑盒调优两种学习范式的实验,证明了在Few-shot学习场景中,相比比Prompt tuning、完整模型调优和其它的Prompt预训练方法都具有显著的优势,最后作者还证明了仅通过学习8个参数来组合预训练的模块化提示,就可以实现对下游任务的快速适应。
方法介绍
方法主要通过以下三个步骤实现对下游任务的快速适应:(1)在大规模无标签数据上进行自监督预训练;(2)使用多任务学习进行预训练模块指令和相应的route;(3)激活并调整子集指令以进行对下游任务的适应。具体流程图如下所示:
「统一MRC任务」:基于Prompt的学习方法不能涵盖较广范围的任务,并且任务之间的标签词可能不同,从而导致预训练模型在不同任务上的效果不佳。基于MCC方法,可以将上下游任务转化成MCC任务使得不同任务可以共享相同的标签词,但该方法当面对大于16个标签的分类任务时仍存在局限性。为此方法将上下游任务统一成机器阅读理解(MRC)格式,通过构建一个查询来进行分类任务,进而可以处理不同标签数的任务,从而实现更广泛的任务支持。
「深度模块化Prompt」:为了增加soft prompt的能力,使其匹配训练数据的复杂性,作者从深度和宽度两个维度扩展了soft prompt,具体如下图所示:
「多任务预训练」:多任务学习已被证明可以提高各种任务的prompt learning的表现。作者对由38个不同类型、领域、大小的中文NLP任务组成的混合任务进行了深度模块化提示的预训练。为了处理不平衡的数据大小,对于每次向前计算,首先随机从1到38中选择一个任务ID,然后获取对应于所选择任务的一个批次的训练数据,从而每个任务的学习步骤数量应该是相同的。
「下游FT」:为了能够快速适应下游任务,本文通过两个阶段进行微调,如下图所示:
实验结果
在38个中文NLP任务上预训练,然后在14个下游任务上进行评估。在Few-Shot下的实验表明,具体如下图所示,可以发现「其性能明显优于PT、全模型微调和之前的prompt训练方法」。仅通过调整route(仅有8个参数)冻结PTM和所有prompt,就可以实现对下游任务的快速适应。
推荐阅读
[1]LLMs与AutoGPT结合:揭示GPT-4惊人决策能力!
[2]Goat-7B干翻GPT-4,超PaLM-540B!24G可训练
[4]Meta最新模型LIMA,没有RLHF远胜Alpaca!!
[5]DTG一种简单有效的Prompt方法,激发LLM能力!
[7]MPT-7B:可商用的开源模型,效果堪比LLaMA-7B